package org.facyt.vacas.dao.impl;


import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.facyt.vacas.dao.AnimalDAO;
import org.facyt.vacas.entities.vacas.Alimento;
import org.facyt.vacas.entities.vacas.restricciones.Restriccion;
import org.springframework.transaction.annotation.Transactional;


public class AnimalDAOImpl implements AnimalDAO {

	private static final Log logger = LogFactory.getLog(AnimalDAOImpl.class);
	
	@PersistenceContext
	private EntityManager entityManager;

	public EntityManager getEntityManager() {
		return entityManager;
	}

	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}


	public List<Alimento> getAllAnimales() throws Exception {
		// armo la consulta para obtener todos los animales (alimento para cada
		// animal).
		StringBuilder queryString = new StringBuilder();
		List<Alimento> lista = null;
		
		queryString.append("FROM Alimento animal ");
		try {
			// se crea la query
			Query query = this.entityManager
					.createQuery(queryString.toString());

			lista = (List<Alimento>) query.getResultList();
		} catch (Exception e) {
			logger.error("", e);
			return null;
		}
		
		return lista;
	
	}

	public Alimento getAnimalById(long id) throws Exception {
		StringBuilder queryString = new StringBuilder();
		Alimento resultado = null;
		
		queryString.append("FROM Alimento animal ");
		queryString.append("where animal.id = :id ");
		try {
			// se crea la query
			Query query = this.entityManager
					.createQuery(queryString.toString());

			query.setParameter("id", new Integer(new Long(id).intValue()));
			
			List lista = query.getResultList();
			if (!lista.isEmpty())
				resultado = (Alimento) lista.get(0);
		} catch (Exception e) {
			logger.error("", e);
			return null;
		}
		
		return resultado;
	}
	
	@Transactional
	public Alimento getAnimalByIdCompleto(long id) throws Exception {
		StringBuilder queryString = new StringBuilder();
		Alimento resultado = null;
		
		queryString.append("FROM Alimento animal ");
		queryString.append("where animal.id = :id ");
		try {
			// se crea la query
			Query query = this.entityManager
					.createQuery(queryString.toString());

			query.setParameter("id",new Integer(new Long(id).intValue()));
			
			resultado = (Alimento) query.getResultList().get(0);
			resultado.getRequerimientos().get(0);
			
		
		} catch (Exception e) {
			logger.error("", e);
			return null;
		}
		List<Restriccion> requerimientos = resultado.getRequerimientos();
		for (int i = 0; i < requerimientos.size(); i++) {
			Restriccion r = (Restriccion) requerimientos.get(i);
			System.out.println(r.getStringRestriccion());
//			if(r.esSimple())
//				restrStirng = ((RestriccionSimple)r).getStringRestriccion();
//			if(r.esDoble())
//				restrStirng = ((RestriccionDoble)r).getStringRestriccion();
//			if(r.esRango())
//				restrStirng = ((RestriccionRango)r).getStringRestriccion();
//			if(r.esFA())
//				restrStirng = ((RestriccionFactorAjuste)r).getStringRestriccion();
			
		}
		return resultado;
	
	}

//	@Override
//	public float getMaxEnergia() throws Exception {
//				
//		//alimento.restriccion, getcvenergia.
//		
//		/*Restriccion r = getRestriccion(cvEnergia);
//		return ((RestriccionRango) r).getRsMenorigual().getCantidad().floatValue();
//		*/
//		return 0;
//	}
//
//	@Override
//	public float getMinEnergia() throws Exception {
//		/*Restriccion r = getRestriccion(cvEnergia);
//		return ((RestriccionRango) r).getRsMayorigual().getCantidad().floatValue();
//		*/
//		return 0;
//	}
//
//	@Override
//	public Float getMaxCalcio() throws Exception {
//		/*Restriccion r = getRestriccion(cvcalcio);
//		return ((RestriccionRango) r).getRsMenorigual().getCantidad().floatValue();
//		*/
//		return null;
//	}
//
//	@Override
//	public float getMaxFosforo() throws Exception {
//		/*Restriccion r = getRestriccion(cvfosforo);
//		return ((RestriccionRango) r).getRsMenorigual().getCantidad().floatValue();
//		*/
//		return 0;
//	}
//
//	@Override
//	public float getMaxProteina() throws Exception {
//		/*Restriccion r = getRestriccion(cvproteina);
//		return ((RestriccionRango) r).getRsMenorigual().getCantidad().floatValue();
//		*/
//		return 0;
//	}
//
//	@Override
//	public Float getMinCalcio() throws Exception {
//		/*Restriccion r = getRestriccion(cvcalcio);
//		return ((RestriccionRango) r).getRsMayorigual().getCantidad().floatValue();
//		*/
//		return null;
//	}
//
//	@Override
//	public float getMinFosforo() throws Exception {
//		/*Restriccion r = getRestriccion(cvfosforo);
//		return ((RestriccionRango) r).getRsMayorigual().getCantidad().floatValue();
//		*/
//		return 0;
//	}
//
//	@Override
//	public float getMinProteina() throws Exception {
//		/*Restriccion r = getRestriccion(cvproteina);
//		return ((RestriccionRango) r).getRsMayorigual().getCantidad().floatValue();
//		*/
//		return 0;
//	}



}
